package com.dayu.structure.proxy;

import org.junit.Test;

/**
 * 代理模式：
 */
public class ProxyTest {
    /**
     * 代理模式大致分为三种：
     * 1、静态代理
     * 2、JDK动态代理
     * 3、Cglib动态代理
     */

    /**
     * 静态代理
     */
    @Test
    public void testStaticProxy(){
        //目标对象
        DayuCustomer target = new DayuCustomer();
        //代理对象
        StaticProxy proxy = new StaticProxy(target);
        proxy.save();
    }

    /**
     * JDK动态代理
     */
    @Test
    public void testDynamicProxy (){
        DayuCustomer target = new DayuCustomer();
        //输出目标对象信息
        System.out.println(target.getClass());
        Customer proxy = (Customer) new JDKProxy(target).getProxyInstance();
        //输出代理对象信息
        System.out.println(proxy.getClass());
        //执行代理方法
        proxy.save();
    }

    /**
     * Cglib动态代理
     */
    @Test
    public void testCglibProxy(){
        //目标对象
        DayuCustomer target = new DayuCustomer();
        System.out.println(target.getClass());
        //代理对象
        DayuCustomer proxy = (DayuCustomer) new CglibProxy(target).getProxyInstance();
        System.out.println(proxy.getClass());
        //执行代理对象方法
        proxy.save();
    }


}
